package com.huluobo.hyj.hyjmodel.contract.contract

import com.huluobo.hyj.hyjmodel.data.ContactListItem
import com.huluobo.hyj.hyjmodel.data.db.Contact
import com.huluobo.hyj.hyjmodel.data.db.IMDatabase
import com.hyphenate.chat.EMClient
import com.hyphenate.exceptions.HyphenateException
import org.jetbrains.anko.doAsync

class ContractPresenter(val view: ContractContact.View) : ContractContact.Presenter {

     val contactListItems = mutableListOf<ContactListItem>()//可变的list

    override fun loadContacts() {
        doAsync {
            try {
                //添加数据之前，先清空一下集合内的内容
                contactListItems.clear()
                //清空数据库
                IMDatabase.instance.deleteAllContacts()
                //读取数据数据是个数组类型[]
                val usernames = EMClient.getInstance().contactManager().allContactsFromServer
                //读取之后 ，排个序
                usernames.sortBy { it[0] } //正序排序
                //循环添加 什么视乎显示首字符  当index == 0的时候显示
                //username 上一位的首字符如果和当前首字符不同的时候
                usernames.forEachIndexed { index, s ->
                    val showFirstLetter = index==0 || s[0] != usernames[index-1][0]

                    //拿到每一个联系人的对象（名字和首字母）
                    val contactListItem = ContactListItem(s, s[0].toUpperCase(),showFirstLetter)
                    contactListItems.add(contactListItem)

                    //获取数据并存入数据库
                    val contact = Contact(mutableMapOf("name" to s))
                    IMDatabase.instance.saveContact(contact)
                }
                runOnUiThread { view.onLoadContactSuccess() }
            } catch (e: HyphenateException) {
                runOnUiThread { view.onLoadContactFailed() }
            }

        }
    }

}